package models

import (
	"qnhd/pkg/util"
	"strings"
)

const LEVEL string = `-50	10	-450
-49	10	-440
-48	10	-430
-47	10	-420
-46	10	-410
-45	10	-400
-44	10	-390
-43	10	-380
-42	10	-370
-41	10	-360
-40	10	-350
-39	10	-340
-38	10	-330
-37	10	-320
-36	10	-310
-35	10	-300
-34	10	-290
-33	10	-280
-32	10	-270
-31	10	-260
-30	10	-250
-29	10	-240
-28	10	-230
-27	10	-220
-26	10	-210
-25	10	-200
-24	10	-190
-23	10	-180
-22	10	-170
-21	10	-160
-20	10	-150
-19	10	-140
-18	10	-130
-17	10	-120
-16	10	-110
-15	10	-100
-14	10	-90
-13	10	-80
-12	10	-70
-11	10	-60
-10	5	-50
-9	5	-45
-8	5	-40
-7	5	-35
-6	5	-30
-5	5	-25
-4	5	-20
-3	5	-15
-2	5	-10
-1	5	-5
0	1	0
1	2	1
2	3	3
3	4	6
4	5	10
5	6	15
6	7	21
7	8	28
8	9	36
9	10	45
10	11	55
11	12	66
12	13	78
13	14	91
14	15	105
15	16	120
16	17	136
17	18	153
18	19	171
19	20	190
20	30	210
21	31	240
22	32	271
23	33	303
24	34	336
25	35	370
26	36	405
27	37	441
28	38	478
29	39	516
30	60	555
31	61	615
32	62	676
33	63	738
34	64	801
35	65	865
36	66	930
37	67	996
38	68	1063
39	69	1131
40	105	1200
41	106	1305
42	107	1411
43	108	1518
44	109	1626
45	110	1735
46	111	1845
47	112	1956
48	113	2068
49	114	2181
50	115	2295
51	116	2410
52	117	2526
53	118	2643
54	119	2761
55	120	2880
56	121	3000
57	122	3121
58	123	3243
59	124	3366
60	125	3490
61	126	3615
62	127	3741
63	128	3868
64	129	3996
65	130	4125
66	131	4255
67	132	4386
68	133	4518
69	134	4651
70	135	4785
71	136	4920
72	137	5056
73	138	5193
74	139	5331
75	140	5470
76	141	5610
77	142	5751
78	143	5893
79	144	6036
80	145	6180
81	146	6325
82	147	6471
83	148	6618
84	149	6766
85	150	6915
86	151	7065
87	152	7216
88	153	7368
89	154	7521
90	155	7675
91	156	7830
92	157	7986
93	158	8143
94	159	8301
95	160	8460
96	161	8620
97	162	8781
98	163	8943
99	164	9106`

var levels []UserLevelInfo

func levelSetup() {
	lines := strings.Split(LEVEL, "\n")
	for _, line := range lines {
		sl := strings.Split(line, "\t")
		levels = append(levels, UserLevelInfo{
			CurLevelPoint:  util.AsInt(sl[2]),
			NextLevelPoint: util.AsInt(sl[1]) + util.AsInt(sl[2]),
			Level:          util.AsInt(sl[0]),
		})
	}
}

func GetLevelInfo(point int) UserLevelInfo {
	l, r := 0, len(levels)-1
	for l < r {
		mid := (l + r + 1) >> 1
		if point == levels[mid].CurLevelPoint {
			return levels[mid]
		} else if point > levels[mid].CurLevelPoint {
			l = mid
		} else {
			r = mid - 1
		}
	}
	return levels[l]
}
